using ASPApiDemo.Common.Option;
using Microsoft.Extensions.DependencyInjection;

namespace ASPApiDemo.Extension;
//静态扩展类，主要功能是自动注册所有配置选项类。
public static class AllOptionRegister
{
    //扫描common层Option目录下所有实现了IConfigurableOptions接口的类
    //获取 ConfigurableOptions类所在程序集中的所有类型
    //筛选出非接口且实现了 IConfigurableOptions 接口的类型
    //对每个类型调用自定义的 AddConfigurableOptions 方法进行注册
    public static void AddAllOptionRegister(this IServiceCollection services)
    {
        if (services == null) throw new ArgumentNullException(nameof(services));

        foreach (var optionType in typeof(ConfigurableOptions).Assembly.GetTypes().Where(s =>
                     !s.IsInterface && typeof(IConfigurableOptions).IsAssignableFrom(s)))
        {
            // 调用自定义注册方法
            services.AddConfigurableOptions(optionType);
        }
    }
}